From 1e66efe5169dfad9a0c62ba42fbf31ce977bf49e Mon Sep 17 00:00:00 2001 From: Sebastien Castiel Date: Tue, 19 Dec 2023 09:36:40 -0500 Subject: Use modal dialogs for expense creation & edition (#10) * First attemps at using route interception and modals * Remove route interception * Make it work * Use Vaul on small screens * Improve vaul --- src/app/groups/[groupId]/@modal/expense-modal.tsx | 83 +++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/app/groups/[groupId]/@modal/expense-modal.tsx (limited to 'src/app/groups/[groupId]/@modal/expense-modal.tsx') diff --git a/src/app/groups/[groupId]/@modal/expense-modal.tsx b/src/app/groups/[groupId]/@modal/expense-modal.tsx new file mode 100644 index 0000000..17bb302 --- /dev/null +++ b/src/app/groups/[groupId]/@modal/expense-modal.tsx @@ -0,0 +1,83 @@ +'use client' +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, +} from '@/components/ui/dialog' +import { useRouter } from 'next/navigation' +import { ReactNode, useEffect, useState } from 'react' +import { Drawer } from 'vaul' + +type Props = { + children: ReactNode + title: ReactNode +} + +export function ExpenseModal(props: Props) { + const size = useTailwindBreakpoint() + if (size === 'xs') { + return + } else { + return + } +} + +export function ExpenseDialog({ children, title }: Props) { + const router = useRouter() + + return ( + router.back()}> + + + {title} + + {children} + + + ) +} + +export function ExpenseVaul({ children, title }: Props) { + const router = useRouter() + return ( + router.back()}> + + {title} + + +
+
{title}
+
{children}
+
+
+
+ ) +} + +export function useTailwindBreakpoint() { + const [size, setSize] = useState<'xs' | 'sm' | 'md' | 'lg'>('xs') + + useEffect(() => { + const handleBreakpointChange = () => { + if (window.innerWidth >= 1200) { + setSize('lg') + } else if (window.innerWidth >= 768) { + setSize('md') + } else if (window.innerWidth >= 640) { + setSize('sm') + } else { + setSize('xs') + } + } + + window.addEventListener('resize', handleBreakpointChange) + handleBreakpointChange() + + return () => { + window.removeEventListener('resize', handleBreakpointChange) + } + }, []) + + return size +} -- cgit v1.3